<?php
namespace classlib\crypt;
class des {
	public static function encrypt($str, $key) {
		$size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC);
		$str = self::pkcs5Pad ($str, $size);
		return strtoupper(bin2hex(mcrypt_cbc(MCRYPT_DES, $key, $str, MCRYPT_ENCRYPT, $key)));
	}

	public static function decrypt($str, $key) {
		$strBin = self::hex2bin( strtolower( $str ) );
		$str = mcrypt_cbc(MCRYPT_DES, $key, $strBin, MCRYPT_DECRYPT, $key);
		$str = self::pkcs5Unpad( $str );
		return $str;
	}

	private static function hex2bin($hexData) {
		$binData = "";
		for($i = 0; $i < strlen ($hexData); $i += 2) {
			$binData .= chr(hexdec(substr($hexData, $i, 2)));
		}
		return $binData;
	}

	private static function pkcs5Pad($text, $blocksize) {
		$pad = $blocksize - (strlen($text) % $blocksize);
		return $text.str_repeat(chr($pad), $pad);
	}

	private static function pkcs5Unpad($text) {
		$pad = ord ($text {strlen($text) - 1});
		if ($pad > strlen($text))
			return false;
		if (strspn($text, chr($pad), strlen($text) - $pad) != $pad)
			return false;
		return substr($text, 0, - 1 * $pad);
	}
}
